/*
 * @Description: 
 * @Version: 1.0
 * @Author: wenbin
 * @Date: 2021-03-29 15:32:14
 * @LastEditors: wenbin
 * @LastEditTime: 2021-03-29 15:36:04
 * @FilePath: /magus-js-lib/src/utils/func.js
 * Copyright (C) 2021 wenbin. All rights reserved.
 */

let funcUtils = {
  /**
   * debounce 防抖
   * 设置方法最小触发间隔，例： 用于实时搜素
   * 简单理解：【延迟】触发
   * @param {*} func 触发函数
   * @param {*} outTime 最小间隔时长
   */
  debounce: function (func, outTime) {
    let timer = null;
    return function () {
      if (timer) {
        clearTimeout(timer);
      }
      timer = setTimeout(() => {
        func.apply(this, arguments);
      }, outTime);
    };
  },
  /**
   * throttle 节流
   * 控制平均触发频率，高帧频控制 例： 用于滚动渲染
   * 简单理解：触发过快，希望【平均】触发
   * @param {*} func 触发函数
   * @param {*} outTime 触发间隔时长
   */
  throttle: function (func, outTime) {
    let canRun = true;
    return function () {
      if (!canRun) return;
      canRun = false;
      setTimeout(() => {
        func.apply(this, arguments);
        canRun = true;
      }, outTime);
    };
  }
}


export default funcUtils;